﻿//Install Visual T4 for syntax highlighting!
//http://visualstudiogallery.msdn.microsoft.com/40a887aa-f3be-40ec-a85d-37044b239591



using System;

namespace Sponsorship.Domain.Sponsors
{
		
    public sealed class EnterSponsor : ICommand
    {
        public Guid SponsorId { get; private set; }
        public string FirstName { get; private set; }
        public string LastName { get; private set; }
        public BankInformation BankInformation { get; private set; }
        public Address Address { get; private set; }
        public string EMail { get; private set; }
        public string TelephoneNumber { get; private set; }
        public string Comment { get; private set; }
        
        public EnterSponsor () {}
        public EnterSponsor (Guid sponsorId, string firstName, string lastName, BankInformation bankInformation, Address address, string eMail, string telephoneNumber, string comment)
        {
            SponsorId = sponsorId;
            FirstName = firstName;
            LastName = lastName;
            BankInformation = bankInformation;
            Address = address;
            EMail = eMail;
            TelephoneNumber = telephoneNumber;
            Comment = comment;
        }
    }
    
    public sealed class SponsorEntered : Event
    {
        public Guid SponsorId { get; private set; }
        public string FirstName { get; private set; }
        public string LastName { get; private set; }
        public BankInformation BankInformation { get; private set; }
        public Address Address { get; private set; }
        public string EMail { get; private set; }
        public string TelephoneNumber { get; private set; }
        public string Comment { get; private set; }
        
        public SponsorEntered () {}
        public SponsorEntered (Guid sponsorId, string firstName, string lastName, BankInformation bankInformation, Address address, string eMail, string telephoneNumber, string comment)
        {
            SponsorId = sponsorId;
            FirstName = firstName;
            LastName = lastName;
            BankInformation = bankInformation;
            Address = address;
            EMail = eMail;
            TelephoneNumber = telephoneNumber;
            Comment = comment;
        }
    }
    
    public sealed class ChangeSponsor : ICommand
    {
        public Guid SponsorId { get; private set; }
        public int Version { get; private set; }
        public string FirstName { get; private set; }
        public string LastName { get; private set; }
        public BankInformation BankInformation { get; private set; }
        public Address Address { get; private set; }
        public string EMail { get; private set; }
        public string TelephoneNumber { get; private set; }
        public string Comment { get; private set; }
        
        public ChangeSponsor () {}
        public ChangeSponsor (Guid sponsorId, int version, string firstName, string lastName, BankInformation bankInformation, Address address, string eMail, string telephoneNumber, string comment)
        {
            SponsorId = sponsorId;
            Version = version;
            FirstName = firstName;
            LastName = lastName;
            BankInformation = bankInformation;
            Address = address;
            EMail = eMail;
            TelephoneNumber = telephoneNumber;
            Comment = comment;
        }
    }
    
    public sealed class SponsorChanged : Event
    {
        public Guid SponsorId { get; private set; }
        public string FirstName { get; private set; }
        public string LastName { get; private set; }
        public BankInformation BankInformation { get; private set; }
        public Address Address { get; private set; }
        public string EMail { get; private set; }
        public string TelephoneNumber { get; private set; }
        public string Comment { get; private set; }
        
        public SponsorChanged () {}
        public SponsorChanged (Guid sponsorId, string firstName, string lastName, BankInformation bankInformation, Address address, string eMail, string telephoneNumber, string comment)
        {
            SponsorId = sponsorId;
            FirstName = firstName;
            LastName = lastName;
            BankInformation = bankInformation;
            Address = address;
            EMail = eMail;
            TelephoneNumber = telephoneNumber;
            Comment = comment;
        }
    }
    
    public sealed class DeleteSponsor : ICommand
    {
        public Guid SponsorId { get; private set; }
        public int Version { get; private set; }
        
        public DeleteSponsor () {}
        public DeleteSponsor (Guid sponsorId, int version)
        {
            SponsorId = sponsorId;
            Version = version;
        }
    }
    
    public sealed class SponsorDeleted : Event
    {
        public Guid SponsorId { get; private set; }
        
        public SponsorDeleted () {}
        public SponsorDeleted (Guid sponsorId)
        {
            SponsorId = sponsorId;
        }
    }

}